{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# GANs - GENERATIVE ADVERSARIAL NETWORKS\n",
    "\n",
    "Brief introduction to Generative Adversarial Networks or GANs. This notebook is organized as follows:\n",
    "\n",
    "1. **Research Paper**\n",
    "* **Background**\n",
    "* **Definition**\n",
    "* **Training GANs with MNIST dataset, Keras and TensorFlow**\n",
    "* **Tips and tricks**"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 1. Research Paper\n",
    "\n",
    "* [Generative Adversarial Nets](https://arxiv.org/pdf/1406.2661.pdf)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 2. Background\n",
    "\n",
    "Brief definition of some concepts, such as supervised and unsupervised learning, and discriminative and generative models.\n",
    "\n",
    "### Supervised learning\n",
    "\n",
    "Supervised learning algorithms learn to map a function $\\hat{y}=f(x)$, given labeled data y.\n",
    "\n",
    "* Examples: Classification algorithms (SVM), regression algorithms (Linear regression).\n",
    "\n",
    "* Applications: Object detection, semantic segmentation, image captioning, etc.\n",
    "\n",
    "### Unsupervised learning\n",
    "\n",
    "Unsupervised learning algorithms learn the underlying structure of the given data, without specifying a target value.\n",
    "\n",
    "* Examples: Clustering algorithms (k-means), generative models (GANs)\n",
    "\n",
    "* Applications: Dimensionality reduction, feature learning, density estimation, etc.\n",
    "\n",
    "### Discriminative models\n",
    "\n",
    "Most of the supervised learning algorithms are inherently discriminative. \n",
    "\n",
    "Discriminative model allows us to evaluate the **conditional probability** $P(y|x)$.\n",
    "\n",
    "Learns a function that maps the input $x$ to an output $y$.\n",
    "\n",
    "* Examples: Logistic regression, Support Vector Machines, Neural networks.\n",
    "\n",
    "### Generative models\n",
    "\n",
    "Most of the unsupervised learning algorithms are inherently generative.\n",
    "\n",
    "Generative model can allows us to evaluate the **joint probability** $P(x,y)$.\n",
    "\n",
    "Tries to learn a joint probability of the input $x$ and the output $y$ at the same time.\n",
    "\n",
    "* Examples: Latent Dirichlet allocation, Restricted Boltzmann machine, Generative adversarial networks.\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 3. Definition\n",
    "\n",
    "Generative Adversarial Networks or GANs is a framework proposed by [Ian Goodfellow](http://www.iangoodfellow.com/), Yoshua Bengio and others in 2014.\n",
    "\n",
    "GANs are composed of two models, represented by neural networks:\n",
    "* The first model is called a **Generator** and it aims to generate new data similar to the expected one. \n",
    "* The second model is named the **Discriminator** and it aims to recognize if an input data is ‘real’ — belongs to the original dataset — or if it is ‘fake’ — generated by a forger.\n",
    "\n",
    "\n",
    "* **Generator Network**: The input to the generator is a series of randomly generated numbers called **latent sample**. It tries to produce data that come from some probability distribution. The generator network takes random noise as input, then runs that noise through a differentiable function to transform the noise and reshape it to have recognizable structure. The output of the generator network ia a realistic image. Without training, the generator produces garbage images only. \n",
    "    \n",
    "    So z (latent sample, vector of unstructured noise) is essentially a vector of unstructured noise. It’s a source of randomness that allows the generator to output a wide variety of different vectors.\n",
    "\n",
    "\n",
    "* **Discriminator Network**: The discriminator is a **classifier** trained using the **supervised learning**. It classifies whether an image is real (1) or is fake (0).\n",
    "\n",
    "\n",
    "* **Training GANs: Two player game**: The Generator (forger) needs to learn how to create data in such a way that the Discriminator isn’t able to distinguish it as fake anymore. The competition between these two teams is what improves their knowledge, until the Generator succeeds in creating realistic data.\n",
    "\n",
    "    $G$ try to fool discriminator by generating real-looking images.\n",
    "\n",
    "    $D$ try to distinguish between real and fake images.\n",
    "\n",
    "    Train jointly in **minimax game**\n",
    "    \n",
    "### Network Design\n",
    "\n",
    "<p align=\"center\">\n",
    "    <img src=\"../../img/network_design_gan.png\" width=\"600\"\\>\n",
    "</p>\n",
    "\n",
    "### Cost function\n",
    "\n",
    "Minimax objective function (Value Function or Cost Function of Minimax Game played by Generator and Discriminator):\n",
    "\n",
    "$$ \\underset{\\theta_{g}}{min} \\: \\underset{\\theta_{d}}{max} \\; V(D,G) = \\mathbb{E}_{x\\sim p_{data}(x)}[log D_{\\theta_{d}}(x)] + \\mathbb{E}_{z\\sim p_{z}(z)}[log(1 - D_{\\theta_{d}}(G_{\\theta_{g}}(z)))]$$\n",
    "\n",
    "* $D_{\\theta_{d}}$ wants to maximize  objective such that $D(x)$ is close to 1 (real) and $D(G(z))$ is close to 0 (fake).\n",
    "* $G_{\\theta_{g}}$ wants to minimize objective such that $D(G(z))$ is close to 1 (discriminator is fooled into thinking generated G(z) is real).\n",
    "\n",
    "Alternate between:\n",
    "1. Gradient ascent on D\n",
    "$$\\underset{\\theta_{d}}{max} [\\mathbb{E}_{x\\sim p_{data}(x)}log D_{\\theta_{d}}(x) + \\mathbb{E}_{z\\sim p_{z}(z)}log(1 - D_{\\theta_{d}}(G_{\\theta_{g}}(z)))]$$\n",
    "\n",
    "2. Instead: Gradient ascent on generator, different objective\n",
    "$$\\underset{\\theta_{g}}{max}[\\mathbb{E}_{z\\sim p_{z}(z)}[log( D_{\\theta_{d}}(G_{\\theta_{g}}(z)))] $$\n",
    "\n",
    "Instead of minimizing likelihood of discriminator being correct, now maximize likelihood of discriminator being wrong. Same objetive of fooling discriminator, but now higher gradient signal for bad samples => works much better!\n",
    "\n",
    "As a result, \n",
    "* the Discriminator is trained to correctly classify the input data as either real or fake. \n",
    "    * This means it’s weights are updated as to maximize the probability that any real data input x is classified as belonging to the real dataset, while minimizing the probability that any fake image is classified as belonging to the real dataset. \n",
    "    * In more technical terms, the loss/error function used maximizes the function D(x), and it also minimizes D(G(z)).\n",
    "* the Generator is trained to fool the Discriminator by generating data as realistic as possible, which means that the Generator’s weight’s are optimized to maximize the probability that any fake image is classified as belonging to the real dataset. Formally this means that the loss/error function used for this network maximizes D(G(z))."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 3. Training GANs with MNIST dataset, Keras and TensorFlow\n",
    "\n",
    "A standard GANs implementations using fully connected layers and the [Keras](https://keras.io/) library.\n",
    "\n",
    "* **Data**\n",
    "    * Rescale the MNIST images to be between -1 and 1.\n",
    "    \n",
    "* **Generator**\n",
    "    * **Simple fully connected neural network**, **LeakyReLU activation** and **BatchNormalization**.\n",
    "    * The input to the generator is called 'latent sample' (100 values) which is a series of randomly generated numbers, and produces 784 (=28x28) data points which represent a digit image.  We use the **normal distribution**.\n",
    "    * The last activation is **tanh**.\n",
    "    \n",
    "* **Discriminator**\n",
    "    * **Simple fully connected neural network** and **LeakyReLU activation**.\n",
    "    * The last activation is **sigmoid**.\n",
    "    \n",
    "* **Loss**\n",
    "    * binary_crossentropy\n",
    "\n",
    "* **Optimizer**\n",
    "    * Adam(lr=0.0002, beta_1=0.5)\n",
    "\n",
    "* batch_size = 64\n",
    "* epochs = 100\n",
    "\n",
    "\n",
    "### 1. Load data\n",
    "\n",
    "#### Load libraries"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2018-06-18T17:17:29.299849Z",
     "start_time": "2018-06-18T17:17:28.948111Z"
    }
   },
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "\n",
    "%matplotlib inline\n",
    "import matplotlib.pyplot as plt"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2018-06-18T17:17:30.625836Z",
     "start_time": "2018-06-18T17:17:29.301825Z"
    }
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Using TensorFlow backend.\n"
     ]
    }
   ],
   "source": [
    "from keras.datasets import mnist\n",
    "from keras.models import Sequential\n",
    "from keras.layers import Dense, LeakyReLU, BatchNormalization\n",
    "from keras.optimizers import Adam\n",
    "from keras import initializers"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Getting the data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2018-06-18T17:17:31.211621Z",
     "start_time": "2018-06-18T17:17:30.628121Z"
    }
   },
   "outputs": [],
   "source": [
    "# load dataset\n",
    "(X_train, y_train), (X_test, y_test) = mnist.load_data()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Explore visual data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2018-06-18T17:17:31.673570Z",
     "start_time": "2018-06-18T17:17:31.213616Z"
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "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Z86cCeSelMJW0zbbbAPkj0W14ImqVTjiiCMAOPPMM4HCT7HFtMLr1VprrQXkyglg2223BWDjjTee7+tWXXXV9PjEE08sT+Yi07lzZyD33dp///3Tc94qX2211YD871ux37MePXoAcMstt6Rpf/zjHwGYMWNGkbmuLG9B+t+vhx9+uJrZSW211VYAvPbaaxV5P7WgREQkSqqgREQkSlF28S211FLp8RZbbAHA4MGDgfwukUI+/PBDAAYMGADA/fffn54bM2YMkBvwB7jssstKkOP6teaaawKw5JJLVjkn8dhwww3TY+8yOvjggwFo27Ztes4sMwb82WefpWneBb3RRhsBcMABB6TnfELA+++/X45sR8N/57p161aR9/OlJwB33HEHkPtbECufeLTeeusB1e3i825XgLXXXhvI/V2A3Pe8LO9dtjuLiIi0QJQtqFtvvTU97tOnT1Gv9RaXT+0Npz37U8kmm2zSwhzWt65du6bHffv2zTsXPt13794dgP/85z+VyViV+GScK664AoDevXun53wqeSHemt99993TNJ9G7eW44oorpufC43r23HPPAYVbUP/973+BXEsnfHovNEFnu+22A3JTneuFt/r+8Y9/VDkn+b1WRx99NJDr0YLytvjVghIRkSipghIRkShF1cXnsfV8tT00HoALu+wee+wxAK688so07csvvwTgzTffBGDq1KnpuZ133rngPSVj++23B+DOO+9M07x7yw0cODA9njhxYmUyVmU9e/YE4He/+91Cr/3444/T41133RXInySx7rrrljh3tefmm28G4JFHHml0bu7cuQBMmjSpSffyKDJvv/02kFs/FQrf5/XXXy8us1USdm1W2+23394ozbuvyy2eUhAREQlE0YLy+Ho+eBrG1vPV40899RSQP2nCB0bDaeNe23/99dcAjBs3Lj3ng6xhC80nVSjSORx++OFA4afQkSNHArko8a1JGOmgoQkTJgC5lfVhJImw5eR8enlrNm/ePKBw+RTLJ6Asv/zy873m888/T49LHO+wpMLJWx07dqxiTvI17EWB3N/qclMLSkREolS1FlQYwfj0008HcjX15MmT03NfffUVAHfffTcAs2bNSs898cQTef82VbiY8tRTTwVyCy1bm3Bq829/+1sgfzrvtGnTALj44osrm7GI+NTaY445BoBnn302PffRRx8BuenRCxPTk3GtCqOT+/+b8He6oX79+pU9T6UQTrtf0OepFP+u+uLc0BdffFGRPKgFJSIiUVIFJSIiUap4F98SSywB5E8N96atxykLY2f5tNByNXnXWGONstw3dr49RLh9SSGDBg0C4IUXXih3lqLlSxf69+/f4nv5FhzSNGHX+1lnnQXkT9X3yByFvPXWW0Bu6nrsNthgg0Zp77zzThVykuF/o8Nu6Q8++ADI/a0uN7WgREQkShVvQW2++eZA4Thce++9N9D8bcOl6fbYYw+gcFzCv//97+nxddddV7E81TLfbHDppZde4HU///nP8/775ZdfTo9jiLtWCd56P/TQQ4H82I8N+eJxWPCGhb4BobeyAJ588kkA5syZ0+y8Vlu5Nwb0JT3+9wDgkEMOAWC33XZrdP1FF10E5CZPlZtaUCIiEqWKt6CuvvpqID/ckLeYyt1y8vAhhaIitxb77LMPAJdffnmjcy+99BKQW7ALMH369MpkrAb4PmWdOnVK0/70pz8BhXsEFvR983GtI488Mk374YcfSpfZyITb3j/66KNAacd/R48eDcBtt91WsnvGoEOHDk26btNNNwVyf1fDVunqq68OwOKLLw7kj+v5dzRsZb766qtAblHzoovmqomxY8cW9wFaSC0oERGJkiooERGJUkW6+HxjO8jF3QsHPL3JX27e1RK+t09FrWc+KA0Lnlb+ySefAPW/AWFThNOXfWKPl124gZt3jXiXXTjRwQeevWsw5N0m++67b5rmE1K+//77ln+AiHk3VFN2FVjYhoXO/8bsueeeaZrH76wVYTeb/4265ZZbADjnnHMW+Fqf7ORl6vEOAb755hsA3n33XQD+8pe/pOd8GU84vOK//x7DMFziU87NCQtRC0pERKJUkRZUWAP7QF0Yu+yBBx4o+Xv6guBCiytHjBiRHp999tklf+/YhBG2F/QUWmjiRGvj389w2u2wYcPyrrngggvSY/8ujRkzBsgf1PZz4QQBt9JKKwFw2WWXpWmffvopkL9/UczRt4vh+zUB7LTTTkBuOvMzzzyTnvv2228Xeq+jjjoqPe7bt2+Jclh9xx9/fHrse635lvYL0/C7895776XnXnnllaLy4TEn/TvqPSvVoBaUiIhESRWUiIhEqWrbbYRdF76lRil4155vYuhbeUBu0O+qq65K08LtO+qNT0gptCLcDR8+PD0eP3582fMUo3BChHffhd8b54PuHp8QcivqvTvEoxdALmpEOOlhwIABQK7bz6OnAAwZMgSA559/Pk274oorAJg6dWqj/NTqBB/vvrrkkkua9fqw276euvhC/v+9GnbZZZe8/15YvM5yUgtKRESiVLUWVCmnlntLAXJPvr179wbyWwi9evUq2XvWAt9Yr9B22D5wesQRR1QyS1Fp06YNkIsvBnDaaacBMHv27DTN47vdf//9QH4csi5dugBwww03ALkp6QAffvghAMcdd1ya5lHhPQZaOAjuK/x79OiRpjXcWjvcJr3QRnKtgW/zLpXx8MMPV+291YISEZEoVaQFFS7I82OPCQdw0kknNeu+J598MgDnn39+mubbxnt/fri3VGuzwgorAIWnlt90001AfY/BLYxPp/VWE+QWNR577LFpmrdEt9lmGyA/fp4vDPWlFBdeeGF67s477wTyWz3Oo28//fTTaZof9+nTJ0076KCD8l7n3/mYhWN6Pv4ZLu1obnRxL3dF2G891IISEZEoqYISEZEoVaSLL4x958errLJKmnb99dcDuRhRU6ZMSc95t4pvbuZh5SEXRt5XUUNuVbp3YbVG3rUUxjFrKNwor7Xq169fozSfOBFOM/dpzeFW4w35NWFkiOZunzF06NCCx7HzzQXPPffcNG3XXXcF8id0FOrybMgjcoTbmPhWPYViG3q3YVMiUUjT+HDM+uuvn6YVG5WipdSCEhGRKFVtmrk/qUIuBpVPA/cBZID11ltvvvfwVoBP3YXCT8WtQTjV3jcr88kR4ULRG2+8EVDEcoBJkyYBuUW2kFvoHbbUnS/CffHFF9M0j302YcIEoL43HVwYn2pfKPbgGWeckR7PnDlzoffyltcWW2yRphXa8n3kyJEA3HzzzUD+3wJpGS/vBfXElJtaUCIiEiVVUCIiEqWKdPGFm7i99tprAGy11VaNrvOJEx07dmx0zidO+Gp+aP76qXq03HLLpcfhBBSAL774Ij0O1/y0djvssAOQvybPu5TC7WB88o7Hw6v3DQXLIYym0Vz+/+Sxxx5L0/xvgCZHlM+2226bHt91110VfW+1oEREJEoVaUF5FHHIbXEdrtT3yOOF+KpxHwT96KOPypFFaYV8sP7ee+9N08JjKY7HdQwjjB9++OFF3ePjjz8GchE9Ro8enZ677bbbgPzND6V8wghA1aIWlIiIRKni08x976dwT5dC27JLcd5///302Kff+8JJkUrw/anCrcv/+c9/AnDxxRenaR5d36fohxHbffcBXwIglef7nu2///5VzolaUCIiEilVUCIiEiUrtDp7vhebNf3iOpckSYtHEFWeOSrPkhubJEmXltxA5ZmnxeUJKtNQU37n1YISEZEoqYISEZEoqYISEZEoqYISEZEoqYISEZEoqYISEZEoFRtJYjIwsRwZqTFrlug+Ks8MlWfplaJMVZ45+o6WVpPKs6h1UCIiIpWiLj4REYmSKigREYmSKigREYmSKigREYmSKigREYmSKigREYmSKigREYmSKigREYmSKigREYmSKigREYmSKigREYmSKigREYmSKigREYmSKigREYmSKigREYmSKigREYmSKigREYmSKigREYmSKigREYmSKigREYmSKigREYmSKigREYmSKigREYmSKigREYmSKigREYmSKigREYmSKigREYmSKigREYmSKigREYmSKigREYmSKigREYmSKigREYmSKigREYmSKigREYmSKigREYmSKigREYmSKigREYmSKigREYmSKigREYmSKigREYmSKigREYmSKigREYmSKigREYlSVSsoM+tvZoOrmYd6ovIsPZVpaak8S6vey7PsFZSZHWRmr5vZLDP7ysyeMrPty/2+88nLBDObk83LLDN7thr5aImYyjObn5PM7N9mNtvM3jOz9auVl+aKpUzNbI3gu+k/iZmdWum8tEQs5ZnNy2ZmNtrMppvZ52bWrxr5aInIynM7M/unmc00s/8rdz7KWkGZ2SnAtcClQEdgDeAmYO9yvu9C/CZJknbZn92qmI+ixVaeZvY74ChgL6Ad0B2YXI28NFdMZZokyafBd7Md8HPgR+ChSueluWIqz6z7gBeBDsCOwHFm1qNKeSlaTOVpZh2AR4GBwHLAAOAxM1u+bG+aJElZfoBlgVnA/gu4pj8wOPjvvwGTgOlkvlSdg3PdgHeBmcAXwGnZ9BWBx4FpwP+A0cAi83m/CUDXcn3mcv7EVp5kHm4+A3apdtnUS5kWeO8/AS9Uu5xquTyBb4BODd7v7GqXVS2WJ5kH0HcapH0AHFWuMihnC2pbYEng4SJe8xSwHrAy8AYwJDh3B3BskiTLABsDI7LppwKfAyuRecI4B0gW8B5DzOxrM3vWzDYtIm/VFlt5rp792djMPst2811gZrU08Sa2Mm3oMODuIvJWbTGW57XAYWa2mJltkM3j80Xkr5piK0/L/jRM27iI/BWlnH9MVgAmJ0kyr6kvSJLkL0mSzEyS5DsyTwabmtmy2dNzgU5m1j5JkqlJkrwRpK8KrJkkydwkSUYn2aq9gIOBtYA1gReAZ8xsuaI/WXXEVp6rZ//djUxX1K+BPmS6/GpFbGWaMrNfkflj8WCRn6maYizPx4H9gDnA+8AdSZK8VvxHq4rYyvNlYDUz65Ot8A8HfgYs1czPt1DlrKCmACua2aJNudjM2pjZ5Wb2sZnNINMdB5nmJ0AvMk3UiWY2ysy2zaYPBD4CnjWzT8zsrPm9R5IkY5IkmZMkyTdJklxGpkn7q+I/WlXEVp5zsv8OSJJkWpIkE4Bbs/esFbGVaehw4KEkSWY19cNEIKryzI6ZPA1cSKYl8lNgdzM7vhmfrRqiKs8kSaaQGfs6BfgPsAeZ1ujnxX+0JipX3yG5/tP9FnBNf7L9p8ChwHvA2mSajcuRaWau2+A1iwEnA58VuF9n4L80cVwk+349ylUG9VyeZJ6avgN2CNJOBR6udlnVapkG17QlM4awc7XLqJbLE+gCTG2Q9kfg8WqXVS2WZ4FrFwUmAruXqwzK1oJKkmQ60A+40cz2MbOlss3CPc1sQIGXLEPmD94UMn/8LvUTZra4mR1sZssmSTIXmAH8kD3X3czWNTML0n9oeHPLTOH9ZfZeS5rZ6WSeLMaU9pOXR2zlmSTJN8ADwBlmtoyZrQ4cTaZLpSbEVqaBnmRa9y+U4GNWTITl+UHmcjvIzBYxs1WA3sC40n3q8omwPDGzzbN5aA9cCXyeJMkzpfvUDVTgKeBg4HVgNpnZJU8A2xWo/dsBw8nMMJlIZoA4AdYFFifTVJ9KpgBfA7bPvu5kMk3Z2WSamufPJx+dgf/LXjcF+DvQpdpPSbVantlr2wP3Z9/jMzK/TFbtMqrlMs1e/wxwUbXLpR7KE9g5+9rp2bz8GViq2mVUw+U5NFuW08k8oK5czs9u2TcVERGJSi1NCRYRkVZEFZSIiERJFZSIiERJFZSIiERJFZSIiESpSSuUnZlpyl9WkiQNY1IVTeWZo/IsuclJkqzUkhuoPPO0uDxBZRpqyu+8WlAi9WlitTNQZ1SeVaAKSkREoqQKSkREolTUGJS0Duuvn9u1/emnnwagTZs2AKy55ppVyZOItD5qQYmISJTUgpLUoEGDAOjdu3ea1qFDBwAef7xmgpSLSJ1QC0pERKKkCkpERKKkLr5WqmPHjgAMGzYsTdtmm20ACLdgefvttwE46qijKpg7ERG1oEREJFLRt6B8evOyyy4732tOOOGE9HippZYCYIMNNgDgD3/4Q3ruyiuvBKBPnz5p2rfffgvA5ZdfDsAFF1xQimxHy6eQe1n84he/aHTN2WefnR6//vrrAEyZMqUCuRNpmaWXXjo9HjlyJACrrbZamvbLX/4SgAkTJlQyW9JMakGJiEiUqtaCWmONNdLjxRdfHIDtttsOgO233z49t9xyywHQq1evou7/+eefA3D99denaT179gRg5syZadq4ceMAGDVqVFH3r1U+bbxbt27zvcbLDuCFF14oe55EmsJbQiut1Dhm69SpUwH49a9/naZtueWWAIwfPz5NU09AbVELSkREoqQKSkREolTxLr7NNtsMgBEjRqRpC5oAUawff/wRgPPOOw+AWbNmpeeGDBkCwFdffZWmeddA2A1Qb8LYevfddx8AZo23Ytl3330BGD58eGUyVudOPfVUINeFDbDRRhsBcPDBBze6/v333wegc+fOFchdPDbeeOP0+MQTTwQKx3z073E4POB8klOnTp3SNP+Of/HFF2la+P+itfCJUIcccggAO+64Y3qu0HfttNNOA+DLL78E8odcBg8eDMCrr75answ2oBaUiIhEqeItqE8//RTIH6wspgUV1tzTpk0D8gdGv//+ewDuvffeFuWznhx66KHpsT99PvnkkwD8/ve/T8+FT5rSNP406q2A8OnUJ+UUaq2Gi6HdeuutB8C7776bpoUtgnq18847p8cLWhD+3XffAbmn+PC1Z511VqPrvYzvuuuuNK21TJII42led911AKy44opA/vfRp+KHE08GDhyYd6/wer/uwAMPLG2G50MtKBERiZIqKBERiVLFu/j+97//AXD66aenad27dwfgzTffBPLXLrm33noLgF133TVNmz17NpA/0HfSSSeVOMe16+WXXwZyE1Mgt4L+5JNPBtStNz+rrrpqejx06FAA1llnnUbXefe0RzAIu0PGjh0LwBZbbNGk91xkkUXy7lXv+vfvD+T/LXB33303AF9//XWa5tFPwjT/bj/zzDNArhsrvO7BBx8sYa7jtOiimT/lXbp0AeDPf/5zes6j67z44osAXHTRRem5l156CYAlllgiTfvrX/8KwG677dbofTyyTKWoBSUiIlGqWiSJRx55JD32Kece4WHTTTdNz/mgqT89easp9M4776THxxxzTOkzW2P23ntvIDe9NByQ/9vf/gbkYhBKvq5duwL5T6A//elPm/z6cFLD5MmTgfyneo+GcOeddwKw+uqrN7pHOEminnlLsW3btmnaxIkTATj33HOB/CUhbt11102PzznnHCA3eB/+ffAWWmv4rvsU8ttvv73Rueeeew7ITZyYMWNGo2vCSRUNW05hZBlv2VaKWlAiIhKlKKKZN6zRp0+f3uiao48+GoAHHnggTfNFuZKLWQjwq1/9ar7X+cLk8KloQXxMr1Arwhf01ZMzzjgDWHCryac7A5x55pkAvPLKK0DhBd/h1GYvz0ItJx8fDJcF1DMfG9pjjz3SNG+B+sLb448/Pj3n431XX311mrbXXnsBubHtSy65JD138803lyPb0QjHkrwl6b0lN910U3rOgxYUajk5b7EW4ounIX/8rxLUghIRkSipghIRkShF0cXXkA9uQi5kvq/Q90FsgGeffbai+YrZDz/8kB57mfm05bAr1KeaFuJTz0N9+/YFCsdG81hzYXdVLU5bDweFfdv7QjwKStgFN2bMmKLeq1DXnvMYiD65ot750hHvHoVcF59HiAiXlVxzzTVA4Vh8vtHooEGDypPZiPTr1w/IdetBLoKOT7f3rmeAOXPm5L1+ySWXTI/9ux+WqS+VuPjii4HqxuZUC0pERKIUZQsqnCrqkyPeeOMNIH/6r2+mFy4eu/HGG4HCsc7qWRgDzidJeMvJn/yh8dN5uIjXX9ejR49G9/f/J+Hkig022ADIXwjpMbp8unAt8JYg5BY1hnzBsz+lN7XVtPzyywP5kwB22GGHgveGXHzE1sInmxQavPfp+A899FCa5k/24e/2HXfcAeQvW6lH4SQonzgSloO3nPbZZ5/53sOn5/uuDpDrbQn57/OAAQNakOPSUAtKRESiFGULKvTxxx8DcMQRRwC5BY6QGwsIxwR88d8999wDFF7oV0+WWWYZANZee+1G53w/lzCy+0cffQTk9tYJw8z4At+wleXjfFdddRWQH3neF1iXcj+varjtttvSY19UGy51OOiggwCYNGlSUff1SPHhdGDni8sPOOCA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\n",
      "text/plain": [
       "<Figure size 432x288 with 10 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "fig = plt.figure()\n",
    "for i in range(10):\n",
    "    plt.subplot(2, 5, i+1)\n",
    "    x_y = X_train[y_train == i]\n",
    "    plt.imshow(x_y[0], cmap='gray', interpolation='none')\n",
    "    plt.title(\"Class %d\" % (i))\n",
    "    plt.xticks([])\n",
    "    plt.yticks([])\n",
    "    \n",
    "plt.tight_layout()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Reshaping and normalizing the inputs"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2018-06-18T17:17:31.926590Z",
     "start_time": "2018-06-18T17:17:31.675462Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "X_train.shape (60000, 28, 28)\n",
      "X_train reshape: (60000, 784)\n"
     ]
    }
   ],
   "source": [
    "print('X_train.shape', X_train.shape)\n",
    "\n",
    "# reshaping the inputs\n",
    "X_train = X_train.reshape(60000, 28*28)\n",
    "# normalizing the inputs (-1, 1)\n",
    "X_train = (X_train.astype('float32') / 255 - 0.5) * 2\n",
    "\n",
    "print('X_train reshape:', X_train.shape)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 2. Define model\n",
    "\n",
    "#### Generator"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2018-06-18T17:17:32.266239Z",
     "start_time": "2018-06-18T17:17:31.929037Z"
    }
   },
   "outputs": [],
   "source": [
    "# latent space dimension\n",
    "latent_dim = 100\n",
    "\n",
    "# imagem dimension 28x28\n",
    "img_dim = 784\n",
    "\n",
    "init = initializers.RandomNormal(stddev=0.02)\n",
    "\n",
    "# Generator network\n",
    "generator = Sequential()\n",
    "\n",
    "# Input layer and hidden layer 1\n",
    "generator.add(Dense(128, input_shape=(latent_dim,), kernel_initializer=init))\n",
    "generator.add(LeakyReLU(alpha=0.2))\n",
    "generator.add(BatchNormalization(momentum=0.8))\n",
    "\n",
    "# Hidden layer 2\n",
    "generator.add(Dense(256))\n",
    "generator.add(LeakyReLU(alpha=0.2))\n",
    "generator.add(BatchNormalization(momentum=0.8))\n",
    "\n",
    "# Hidden layer 3\n",
    "generator.add(Dense(512))\n",
    "generator.add(LeakyReLU(alpha=0.2))\n",
    "generator.add(BatchNormalization(momentum=0.8))\n",
    "\n",
    "# Output layer \n",
    "generator.add(Dense(img_dim, activation='tanh'))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Generator model visualization"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2018-06-18T17:17:32.273114Z",
     "start_time": "2018-06-18T17:17:32.268218Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "_________________________________________________________________\n",
      "Layer (type)                 Output Shape              Param #   \n",
      "=================================================================\n",
      "dense_1 (Dense)              (None, 128)               12928     \n",
      "_________________________________________________________________\n",
      "leaky_re_lu_1 (LeakyReLU)    (None, 128)               0         \n",
      "_________________________________________________________________\n",
      "batch_normalization_1 (Batch (None, 128)               512       \n",
      "_________________________________________________________________\n",
      "dense_2 (Dense)              (None, 256)               33024     \n",
      "_________________________________________________________________\n",
      "leaky_re_lu_2 (LeakyReLU)    (None, 256)               0         \n",
      "_________________________________________________________________\n",
      "batch_normalization_2 (Batch (None, 256)               1024      \n",
      "_________________________________________________________________\n",
      "dense_3 (Dense)              (None, 512)               131584    \n",
      "_________________________________________________________________\n",
      "leaky_re_lu_3 (LeakyReLU)    (None, 512)               0         \n",
      "_________________________________________________________________\n",
      "batch_normalization_3 (Batch (None, 512)               2048      \n",
      "_________________________________________________________________\n",
      "dense_4 (Dense)              (None, 784)               402192    \n",
      "=================================================================\n",
      "Total params: 583,312\n",
      "Trainable params: 581,520\n",
      "Non-trainable params: 1,792\n",
      "_________________________________________________________________\n"
     ]
    }
   ],
   "source": [
    "# prints a summary representation of your model\n",
    "generator.summary()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Discriminator"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2018-06-18T17:17:32.326856Z",
     "start_time": "2018-06-18T17:17:32.275681Z"
    }
   },
   "outputs": [],
   "source": [
    "# Discriminator network\n",
    "discriminator = Sequential()\n",
    "\n",
    "# Input layer and hidden layer 1\n",
    "discriminator.add(Dense(128, input_shape=(img_dim,), kernel_initializer=init))\n",
    "discriminator.add(LeakyReLU(alpha=0.2))\n",
    "\n",
    "# Hidden layer 2\n",
    "discriminator.add(Dense(256))\n",
    "discriminator.add(LeakyReLU(alpha=0.2))\n",
    "\n",
    "# Hidden layer 3\n",
    "discriminator.add(Dense(512))\n",
    "discriminator.add(LeakyReLU(alpha=0.2))\n",
    "\n",
    "# Output layer\n",
    "discriminator.add(Dense(1, activation='sigmoid'))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Discriminator model visualization"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2018-06-18T17:17:32.332285Z",
     "start_time": "2018-06-18T17:17:32.328654Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "_________________________________________________________________\n",
      "Layer (type)                 Output Shape              Param #   \n",
      "=================================================================\n",
      "dense_5 (Dense)              (None, 128)               100480    \n",
      "_________________________________________________________________\n",
      "leaky_re_lu_4 (LeakyReLU)    (None, 128)               0         \n",
      "_________________________________________________________________\n",
      "dense_6 (Dense)              (None, 256)               33024     \n",
      "_________________________________________________________________\n",
      "leaky_re_lu_5 (LeakyReLU)    (None, 256)               0         \n",
      "_________________________________________________________________\n",
      "dense_7 (Dense)              (None, 512)               131584    \n",
      "_________________________________________________________________\n",
      "leaky_re_lu_6 (LeakyReLU)    (None, 512)               0         \n",
      "_________________________________________________________________\n",
      "dense_8 (Dense)              (None, 1)                 513       \n",
      "=================================================================\n",
      "Total params: 265,601\n",
      "Trainable params: 265,601\n",
      "Non-trainable params: 0\n",
      "_________________________________________________________________\n"
     ]
    }
   ],
   "source": [
    "# prints a summary representation of your model\n",
    "discriminator.summary()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 3. Compile model"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Compile discriminator"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2018-06-18T17:17:32.385813Z",
     "start_time": "2018-06-18T17:17:32.334488Z"
    }
   },
   "outputs": [],
   "source": [
    "# Optimizer\n",
    "optimizer = Adam(lr=0.0002, beta_1=0.5)\n",
    "\n",
    "discriminator.compile(optimizer=optimizer, loss='binary_crossentropy', metrics=['binary_accuracy'])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Combined network"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2018-06-18T17:17:32.670427Z",
     "start_time": "2018-06-18T17:17:32.387601Z"
    }
   },
   "outputs": [],
   "source": [
    "discriminator.trainable = False\n",
    "\n",
    "d_g = Sequential()\n",
    "d_g.add(generator)\n",
    "d_g.add(discriminator)\n",
    "d_g.compile(optimizer=optimizer, loss='binary_crossentropy', metrics=['binary_accuracy'])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2018-06-18T17:17:32.676287Z",
     "start_time": "2018-06-18T17:17:32.672335Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "_________________________________________________________________\n",
      "Layer (type)                 Output Shape              Param #   \n",
      "=================================================================\n",
      "sequential_1 (Sequential)    (None, 784)               583312    \n",
      "_________________________________________________________________\n",
      "sequential_2 (Sequential)    (None, 1)                 265601    \n",
      "=================================================================\n",
      "Total params: 848,913\n",
      "Trainable params: 581,520\n",
      "Non-trainable params: 267,393\n",
      "_________________________________________________________________\n"
     ]
    }
   ],
   "source": [
    "# prints a summary representation of your model\n",
    "d_g.summary()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 4. Fit model"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2018-06-18T17:50:25.368754Z",
     "start_time": "2018-06-18T17:17:32.678615Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "epoch = 1/100, d_loss=0.819, g_loss=1.362                                                                                                                      \n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 10 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "epoch = 2/100, d_loss=0.620, g_loss=1.503                                                                                                                      \n",
      "epoch = 3/100, d_loss=0.513, g_loss=1.512                                                                                                                      \n",
      "epoch = 4/100, d_loss=0.576, g_loss=1.359                                                                                                                                                                                                                          \n",
      "epoch = 5/100, d_loss=0.648, g_loss=1.218                                                                                                                      \n",
      "epoch = 6/100, d_loss=0.543, g_loss=1.285                                                                                                                      \n",
      "epoch = 7/100, d_loss=0.556, g_loss=1.352                                                                                                                      \n",
      "epoch = 8/100, d_loss=0.580, g_loss=1.248                                                                                                                      \n",
      "epoch = 9/100, d_loss=0.614, g_loss=1.166                                                                                                                      \n",
      "epoch = 10/100, d_loss=0.568, g_loss=1.171                                                                                                                      \n",
      "epoch = 11/100, d_loss=0.612, g_loss=1.116                                                                                                                      \n"
     ]
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAagAAADRCAYAAACZ6CZ9AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4zLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvIxREBQAAIABJREFUeJztnXugZWP9/1/nnJkxGEbJNeMSxrcLBmWI1FdKSqRQKHQjl1wq5OtLfRXKLV+S+qYUmUSmkksqoUKRSyHXMhMqTKhRxmXO/v3h937WZ+2zzjp7n732Puuc3q9/Zs/z7LP22s9aez3P5/O8P59PX6PRwBhjjKkb/WN9AsYYY0wRnqCMMcbUEk9QxhhjaoknKGOMMbXEE5Qxxpha4gnKGGNMLfEEZYwxppZ4gjLGGFNLPEEZY4ypJZPaeXNfX9+ETTvR19cHQKuZNRqNRl8Fn9nSh02ZMgWAZ599ttOPrC29HM9/ExY0Go0VOjnARBzPpZdeGoDnn38egGeeeabVP+14POGFMe3v72dwcDC1LbnkkgA8/fTTQ94/efJkgNz79To+q6ZOnQrAokWLRnteQ9r6+/uHfHbR83HGjBkAPPjgg0P6XvKSlwCwYMGC3HEHBwdb+s23NUGNB9qdaIQucNFNMhbEG2aVVVYBYP78+WN1OhOKgYEBABYvXjzGZ9JVunqz6OEF+QdYVRQ9MKtIy7bhhhsC8OijjwJw//33t/qnlYxnf38/U6dOzU0k6623HgC33XbbkPevtNJKQP65tHDhQgCee+651LbmmmsCcPfddw85RtkzUddx0qRsKtD7ll12WQD++c9/pj6dd7z+hx9+OAAHH3zwkM9517veBcBXvvKV1DZt2jSeeuqpIedSxISboEZ7ExdNTGrTCqeXxO/hialaJsrENNrFWBUUTUpVnk/ZMWRVQPaQbvWzr7/++rbOo8iK6ITBwUGefvppdtlll9R29dVXA7DEEkvk3geZ5REnNJ3Tpptumtp+97vfAfDKV74SgD333DP1nXTSSbljaZKOf6cFOsA//vEPAB5//HEgP95rrLEGkH8m6Rg652nTpqU+TZzxGO3cH96DMsYYU0s8QRljjKklfe2YW319fY2+vr7KXQryf8r1suKKK8bPBOCRRx4B8ubhrFmzgLzf9ZOf/CQARx99NAD/+te/Ut/06dOBbKMU4CMf+QiQmcGt4k39apko4xn3Tsa4lM3NjUbj1Z0cYLTjOdIYqH+ppZYC8u4zudW33357IHN/AaywwgsahSOPPDK17bvvvkD2u//c5z435POKXIKjoOPxBFh++eUb2267Ld/+9reH9N13333p9W677QaQ9mr++Mc/pj65+IoEEfqu8RpIXKXn7OzZs1OfXJ7xOukYRWO19957A3DZZZelNrkOtWf18pe/PPX96le/AmDllVdObX/961/1mSP+5m1BGWOMqSVtW1BdPJe2WX311QH4y1/+ktokeVxmmWUAuPLKK1Pfhz70IQAuvfTSjj97oqz4q6AKRddEHM+xFDFQkQU1MDBQKCqJ17z5+7X6fS+66CIA3v/+96e2n/3sZwCccMIJABx77LGpTxbGTjvtlNokF5eyTat4yDwlMTyjWY7dxrWpxILq7+9vTJ06NXeesvq+9rWvpbZf/vKXQLHiVM82fXeACy+8ECCJL6699trUd+aZZwKwzTbbAPDQQw+lPgkt3vSmN6W25jGJ1thqq60GwK233pradP1kVckyBnjxi18M5CXo/f39LF682BaUMcaY8YsnKGOMMbVkXLv4RAwyk+m57rrrApmmH+DVr37BQr/zzjtTm8zlMopcWN12SSneAFqLg+p24GS3qXI8ayRUGBFt/AM89thjQGXXsmciCbmr9FsrGv/4G1Vc4cyZMwF4xStekfoOOuggADbaaCMgf+9roz26kJqJ43XPPfcAcMQRR6S2ZjdUdJ1JoDHM/VOZSGK77bbLiSR0vaPLTs+lIjex3JR/+9vfUptco6973euAzOUZ33/eeecBsNxyy6W+m266CYA5c+akNgnLdA4PP/xw6vvCF74AZGML8NKXvhSA888/H8iLPZqDfgGeeOIJu/iMMcaMb8Z1JgmtPJZffvnUpk08RWVLNAGwzz77AK1ZTZGxsEjazR4xllZTqxZLr0QDrR6/yvPRsbSpDZnVEKP0//73v+fe9+STT6Y+rWw333zz1PbjH/8YyFb6cSUavQPdojlvXBHN53HWWWel1wrjiJaKVvc333wzALfcckvqU1YCSaFjSMhrX/taIPOEQJapIJ6vWGuttQD44Q9/OOScy1LtdPP+fOKJJ5g7d24uN52EBLfffntq22CDDYDsntB9A1n6oygDl1dIwrH4jPv4xz8OwIEH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\n",
      "text/plain": [
       "<Figure size 432x288 with 10 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "epoch = 12/100, d_loss=0.648, g_loss=1.128                                                                                                                      \n",
      "epoch = 13/100, d_loss=0.610, g_loss=1.171                                                                                                                      \n",
      "epoch = 14/100, d_loss=0.648, g_loss=1.002                                                                                                                      \n",
      "epoch = 15/100, d_loss=0.596, g_loss=1.063                                                                                                                      \n",
      "epoch = 16/100, d_loss=0.615, g_loss=1.096                                                                                                                      \n",
      "epoch = 17/100, d_loss=0.609, g_loss=1.060                                                                                                                      \n",
      "epoch = 18/100, d_loss=0.640, g_loss=1.062                                                                                                                      \n",
      "epoch = 19/100, d_loss=0.634, g_loss=1.022                                                                                                                      \n",
      "epoch = 20/100, d_loss=0.591, g_loss=1.097                                                                                                                                                                                                                          \n",
      "epoch = 21/100, d_loss=0.610, g_loss=1.162                                                                                                                      \n"
     ]
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAagAAADRCAYAAACZ6CZ9AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4zLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvIxREBQAAIABJREFUeJztnWeYJFXZhu8h57RkWHJGMggoGS4QJEgWkIxIzgbC9YEiQbKoKAgoIjleIBmBJUpel5zDgiA5x4X5fuBz6u2Z2p7u6eqZ07PP/Wdrz6mprj59qs55c1d3dzfGGGNMbow32DdgjDHGlOEFyhhjTJZ4gTLGGJMlXqCMMcZkiRcoY4wxWeIFyhhjTJZ4gTLGGJMlXqCMMcZkiRcoY4wxWTJBMyd3dXU57cT/6O7u7mr1Gh7PgtzGs6uruB1lW5lkkkkA+Oyzz6r6mHbyVnd39wytXCCH+TnBBMUrasyYMYN4J62PJ9Qf07I5N5Rp5JlvaoEyZigw/vjjA/DVV1+N9ZyJJ544HWtBmm+++QB49NFHx/p3441XKCW+/vrrlu6zRV4azA+viumnnz4dv/7664N4J+0fzwknnDAdf/HFF+3+uEGjq6ur4QXYC1QDTDTRROl4KE+ccYV6C5OIUtKMM84I1F+YRF+Lkhaweuddfvnl6XiTTTbp8zOHMoO8KLWN2WabLR2/+uqrQO27RdJUuyWpep8z1VRTAfDBBx9U+pnNfCfboIwxxmSJFyhjjDFZ0tWMuJWD0bQVllxySQBGjhzZ8rUG0qg/3XTTAfDOO+80dN1mz+/JYNhRcnOS6CSiClrP85dffvlgd3f3sq1ct9nxHCi1VJXIHgmF6neKKaZIbZ9++qn6Wh5PGNw5qt9njjnmSG36zq+88krlnwP150Ijz7wlKGOMMVkyTklQZWy//fYAnHPOOU39Xbt2/KNHjwZg+PDhrVwX6KydrCWoymmLBCVpbRx0FuooCWrKKadMx4svvjgACyywAAB33XVX6nvhhReAWk1JPSci/f5ffvllatN7Zuqppwbg/fffb+geLUEZY4zpWLxAGWOMyZJxXsUnGolPiVglVS3tHs92ZyTQ/IkGYhHnVJVqVwUTf/7552XdA+4kMVAoowfA7LPPDhSqp8cff7zf1+1DNZ6diq9RZyZ9L/077bTT9up76623ev2dnpnll18+tR177LEA/OQnP0ltihlcaaWVAPjb3/7W0P1bxWeMMaZjGbKZJOQ+uvbaa6e266+/HoCHHnoota2wwgrAWHehQ56qXconn3xyoHDPHeR0P4l253GbZpppgNp5tOuuuwJw6623prZRo0YB1YxLp8/ZMolFkpDa4jhtttlmANxxxx2pTU5FVThtdJJTETSl7an5N4af1PvO99xzDwBzzz13alM6pvfeey+1yQljhhm+SVVYpbbCEpQxxpgsyUKCkrSjHdXKK6+c+t58800AlltuOQDuv//+1CdX7Ntuuy21LbHEEgD88Y9/BGCmmWZKfY888ggAhx9+eGrLYRcak0RG9812orGeddZZU5uknxEjRqQ26auvvvpqoND5A+y7775A7W/y8ccf13xORslT24J2i9rB33nnnalvscUWA+C8885LbTvuuGNb76eTQgzklixpG4odtyTS6C79pz/9CagNpN19990BOPPMM9t7s0OIODc0XyabbLLUtttuuwFFYoMYzKy/vf3221PbnHPOCRR5E6PNSu+I1157rV/3agnKGGNMlniBMsYYkyVZqPikZiqLahZSFf31r39Nbfvssw9QayCVSkriaRRnzzrrLABuuOGGqm69Etqt1tt8883TsVLn/+Y3vwFqVXAyhkrVB4UKYNNNNwVqo8w33nhjAB544IHUpuuVGblzQSqJd999F+i7nIDcmpdd9hsv4+effz71bbDBBgDsvPPOQGEwhmIstt5669R20EEHAUW0fRXG/UknnTQdR3VZrsgN+YILLgBqaz7pOLpCC303qQahUI9Xqdp88MEH0/EyyyzT8vWqpr/fddiwYUCt48KJJ54IwKKLLprapKIrC5nQs6JnCGC77bYD4NJLLwVq1bKa5/1V9VuCMsYYkyVZSFAHHHAAAA8//DAAL7/8curbf//9gcIA19eOUzsw7S4++uij1KfCYEMd7Xx+9atfAXDJJZekPhnsVYQv7rhVkE+VY6GQ7uRsEs8/7bTTgNodU3Q/zYlYIE67wG9/+9sA/POf/0x92unttNNOqU1SkSTLVVddNfVpns0zzzxA+a4zut2utdZaAFx88cX9/Sq9GEipSW7g3//+91PbFVdcAZQHu6st7to1RnIbj8+0nnP1Pffcc6lvl112AWolB0mzVTqF5Cg1LbTQQun4ySefBMqzhsuh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\n",
      "text/plain": [
       "<Figure size 432x288 with 10 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "epoch = 22/100, d_loss=0.576, g_loss=1.123                                                                                                                      \n",
      "epoch = 23/100, d_loss=0.594, g_loss=1.064                                                                                                                      \n",
      "epoch = 24/100, d_loss=0.612, g_loss=1.088                                                                                                                      \n",
      "epoch = 25/100, d_loss=0.614, g_loss=1.122                                                                                                                      \n",
      "epoch = 26/100, d_loss=0.588, g_loss=1.120                                                                                                                      \n",
      "epoch = 27/100, d_loss=0.589, g_loss=1.104                                                                                                                      \n",
      "epoch = 28/100, d_loss=0.595, g_loss=1.051                                                                                                                      \n",
      "epoch = 29/100, d_loss=0.568, g_loss=1.112                                                                                                                      \n",
      "epoch = 30/100, d_loss=0.644, g_loss=1.123                                                                                                                      \n",
      "epoch = 31/100, d_loss=0.569, g_loss=1.130                                                                                                                      \n"
     ]
    },
    {
     "data": {
      "image/png": "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UEju11prrdR2wQUXAIXlVXIgvyPQeMiKv/HGG2v6O1mn//d//5fadB//8Ic/BDrv3oL60wUkWoj18yReOvLIIyvOGZEwap555klteq/G75YVq3s69rVqQ1hhC8oYY0yWNMWCUqmLen3qkpdHWa6sKsWPogWlStJLL710atNsv+WWWwKVK/9aVvfy4UJRobrTkD9ZsbYYg5L/XvL7U045JfXNP//8APzjH/9IbRq/TlqZVqus3wgaT91vcXUqSb7u+Vi5XGO23377pTbJzLVyVcwUit+pk8a6P+gZ0/MV5cmy/vW7xZieEkHj+0HP9A033AB05tj195rPPffcdKySWXrmYxxfcblq5Yx0v8bk2auuuqriulptNUVsQRljjMkST1DGGGOypCkuvv7KZWWCRlecthtWFXNV3IaiRlqsYaYAv2pT1VrfTG6hTnXrVUMmenSLSkouN5U2OgPYeuutgUo3leT9nUTZLgkJH7RpY3Qhqhq0akDGsVadvejCkRtPAW79Xc/PDTQ0dlCkh2hcjznmmNSne0+15KKIZOONNwYqf19VLx9b1fOBSKx+vsEGGwDFpoTxHtWzLtl4lIivueaaQCFFh2JL9gMPPLAZl10XtqCMMcZkSRYyc60iVQ9qtdVWS32qeCz5ZEwy06opBlK1yqpmxfUl52xnILAdaAxi0unQoUMBWGWVVXp9rtMrZzeCKulLch+3r1YahFag0fpUAmOsD6dakRdffDHQ2MpfHodOkKrHILwETxKfRGm+KmHLkxEtL/0O0cOimpvjInvvvXc61rjFd6FQhXN5k2IyczU5umodbr/99kDxXoDiN+vrPVDtnP19b9iCMsYYkyWeoIwxxmRJaS6+WAL/vffeq+tvlbks03CbbbZJfauuuioAp512GlBsRAjwxz/+EYBtt902tb3xxhsV55Z5G88fkful3mseiCgbXRUToNiCQ4Hs6AodV9x9uoeUOxZdHj3da7GmmYhuvJ4VOaJLpt46cvrudtQ2rPc74+fvuusuoMiHii47bauj/LLnnnsu9akKSnzGc92EtJnononbqcftOKBSHKZ3s+6veI8qRy+Kz+Savu+++3qdq5briu+IRkMntqCMMcZkSb8sqJilLDl3IxaIsp8V9IuzriSpWjXFzQxVIy2uQlUpQX3VVqUxkN2zsnk7VqNR4tnXdshaJTWrNpa2fNe229B72+xxxWqKqHKBapjFTTD7Qr9XFFUccMABADz77LMAnHzyyQ1fXzt+k1q/U89TtCLXW289oJBJx1p8hx56KACXXXYZUNSPg0IAFTfj61nNfFy4P9dff32g0oISEpcssMACqa3nOyW+/7RzwUYbbZTaBg8eDMDss88OwGOPPVbTdVXzHjSKLShjjDFZ0i8LSlbTmOivJLmar/P5558HCinqiBEjen1PnOFV26yvunt9+VTbsQLry2qKyFpaYoklUtujjz4KVCbm6Vgrmr6sLMmkAX784x8DleOjvXpqqWNYjU7Y+6naNUar/JBDDgEqaxSOiZg8qarbSiaFIp61+uqr9/+C+yC3dABdR7x/dKx/Y8xTFpHiU0rYhaIWoiwwKOIl9f5/ZUXEVX8uYzY2zjjjjDH2qS5pXx6t+HzrPpf0H+DOO+8EKuX/7cIWlDHGmCzxBGWMMSZLSpOZzzLLLOlYNZ/KrI8lOeT++++f2lQn7sQTT0xtPYP6nYZcD9XckHJBxFpaEqxEt6tcfHInVfsd5IqKwdTlllsOqJTxSmraXzrBbTK2yiJvv/02ALvvvjsAd9xxxxjPddJJJ6VjiX7i+WNlhGbQjvHur1uxmttY0nlV3Dj66KNTnwRNUdjU3y3ea5VO54K2aYFCvFCNet+52mJnookmSm1y9a+xxhoAnHfeeamvmhBCf9uMeoi2oIwxxmRJaRZUXHWXuYqTVFfVn6MY4OGHHwbg73//e2nf125qWdnF8ZWV9IMf/CC1qX6hzvXPf/4z9WnFKWlvlECr76abburVNq4R7zOt4mXdxmRxiXjuvvtuAIYMGdLrXNEak3dhIFHm866x0n0t6xUKub+EEeMS1TYbrIYSm2PNUlmq2lQzelvWWWcdAOaYY47UplSe2267DRh7Kksz3xG2oIwxxmSJJyhjjDFZUpqLL9a8k2tJpn8jLgCJLxQkjEG6PfbYAxj3tsqIKHNc9Qyh2MpBFQ9ioFl1uSSuiDlAzzzzDAD77rtvE6+4M4j32QsvvAAUG2TGvDu5/aJLULz44otAsUmh+Rbl3miM49gtuOCCAFx33XUA7LrrrqlPW8N0uhCqP7z++uvpWO+7+OzqWOIn3XsATzzxBFDkT0ahjiqaaKNDgCuvvBIo6pTqvu95HaKZwhxbUMYYY7KkNAuqWVsuv/XWW0AR9ItVe6+99lqgsrJCJwZQJWqA+oPoWr089dRTqU2VD2RhRlmuvkuBTUlJ4zlqrWyRK9GaLyOAu8giiwBwzTXXAMU22dDbcho+fHg61n3Z3yoH0Hly6FroKVWOHhBZqxpjVTAHuPrqq4FxU7gT7wPVIrznnntSmywnWafRIpJkX+/ogw46KPXpHFFopion2223HVDdamoVtqCMMcZkSVc9q7uurq6WZAFG36pWw0rgi9aApO3LLrtsamvV6r+7u7vhjWiaNZ4avymmmAKAueaaK/Xp99YqPVbmLsOXLEv3008/BWq3rHMeTyFraaeddkptm2++OQBHHXUUUFkJvs1Jyg90d3cvM/aPjZlWPe8RjfGRRx4JFPtCQSE5jxXgW2jtNzyeUO6Yxvekkne1M0KMQckzMmzYMKCISQHMN998QLHvGxQWrv6uWfU0a3nmbUEZY4zJEk9QxhhjsiQrF5/M1FgqXtu6S2auemhQmKLNqmLRF812ScXge39l9NVqpMllquzyXLZw7wQXXzXkKpX4RKIesIuvwe8GKgVQqr0ZhURlSs71zI3hecvOxdfANaTjanX0cnqH2oIyxhiTJf2yoOKmbDvvvDNQWDr/+xzQ9hVkU+nUFX+ZVKukXgvVZNTNHs9mBXp13r4qx7eJjragMmTAWFDVaMfGoragjDHGdCyeoIwxxmRJViKJTqIsl9R4441XYV5X28StE1E+Rq15KnaZ9k0/3OZ28ZVLNi6+gRJCsYvPGGNMx1JvLb6RwIhmXEiHMbik84wcPXr0gBzPOjP8SxtPBuj92Y/VchljOmDHsx9kc492uuX0P2oaz7pcfMYYY0yrsIvPGGNMlniCMsYYkyWeoIwxxmSJJyhjjDFZ4gnKGGNMlniCMsYYkyWeoIwxxmSJJyhjjDFZ4gnKGGNMlniCMsYYkyWeoIwxxmSJJyhjjDFZ4gnKGGNMlniCMsYYkyWeoIwxxmSJJyhjjDFZ4gnKGGNMlniCMsYYkyWeoIwxxmSJJyhjjDFZ4gnKGGNMlniCMsYYkyWeoIwxxmSJJyhjjDFZ4gnKGGNMlniCMsYYkyWeoIwxxmSJJyhjjDFZ4gnKGGNMlniCMsYYkyWeoIwxxmSJJyhjjDFZ4gnKGGNMlniCMsYYkyWeoIwxxmSJJyhjjDFZ4gnKGGNMlniCMsYYkyWeoIwxxmSJJyhjjDFZ4gnKGGNMlniCMsYYkyWeoIwxxmSJJyhjjDFZ4gnKGGNMlniCMsYYkyWeoIwxxmSJJyhjjDFZ4gnKGGNMlniCMsYYkyWeoIwxxmSJJyhjjDFZ4gnKGGNMlnynng93dXV1N+tCOo3u7u6uRs/h8SzweJbOyO7u7hkaOYHHs4KGxxPG3THt6ioe7+7ubv071me+rgnKNB/9kPoR28F44xWG9ejRo9t2Hc0ihzGeYIIJAPjqq6969e29997p+A9/+ANQXHP8bb755pu+vmJE41dpAh7PBujvs2YXnzHGmCzxBGWMMSZLuuoxvXLzn37nO996KL/++uuWf3c7YybDhg1Lx5tsskmjl9GLhx56KB2vvPLKAHz66aelnV/uLShcXGWM5ySTTNI955xz8tRTTzV6qj4Zf/zx0/FY3Gz9opq/vh880N3dvUyD15HV895mGh5PyHdMy7jn6nWd1/LM24IyxhiTJR0tkmiH5ZQDtVpNCqj3JXRYaaWV0vGf//xnAIYPH57aPvnkEwD2339/AM4666zU9+WXXwLVV0x9raaqCQPK4PPPP2+69QTlWk1jUDeVdn4zbjHRRBMB8MUXX6S2WjxNZdxzzbhvbUEZY4zJEk9QxhhjsiRLF9+EE06YjuVGquYyUts888yT2p599lmgCOrfd999qW/55ZcH4Lnnnkttc8wxBwBTTTUVMLBygGq5/pEjR6bjOeecs9ff/eUvfwFg6NChAEwzzTSp78033xzjedvhpurq6mKCCSZI90xksskmS8ejRo1q5WX1id15pr9MOumk6Vjvwt/85jcAvPPOO6nvscceA+Cyyy5r4dWVgy0oY4wxWVK3zHy88cYrxbKoFhxeZZVVAHj77bdT35VXXgnA3HPPDRRBwJ7n6Hmuan0KzitoCDDbbLMB8Prrr9d1/QOlNE8ci4MPPhiAZZYp1LTnnHMOANdddx3Q2Iq/r2DtQBnPeH8utNBCAHz00Uep7YUXXmjVpWQhM5ckP74zhgwZAhTpDFF0MskkkwBw7733ArDCCiukvjJTHfpB1jLzqaeeGvhWKAQw8cQTx++saIsCivfffx9ojyVvmbkxxpiOpe4YVFlxmUceeSQdL7LIIkBl/Kce1l9//XT80ksvAcUKLK4ktLqNK7Z6LaeBhsYe4JVXXgFgnXXWSW2PPvooUM4Ka6CkBcREY/2fdO8uu+yyqU8W1FJLLZXaTj75ZKClllTLiVb5euutB8Df/va31BbjmGMjxguV8hD54IMPgMLSP/bYY+u72AHCoEGDAHjmmWcAWHHFFVOfrNDdd98dgCmnnDL16bk+77zzUts222wDFJbXLrvskvr+9a9/lX3pfWILyhhjTJZ4gjLGGJMlLZeZS/4YRQy1uPbklpthhmJLFgX4qqGg4b777pvaJMGUG3BcRuO/0UYbpbbddtsNgDPOOCO1ffjhh0ARvI6/W5uD1k0luqnk0lPbhhtumPq+973vVbRFN5RSGOSGgsK1HStyDDSiC13S5v667yMxVaBn2+GHHw5Uurai63+go1DFXHPNBRTvPyjET7p/o5BHfb/4xS9S2xRTTAEUv9muu+6a+uziM8YYY2hyNXMFQ6OloxX4jDPOmNouv/xyoAg4n3766alPMvP+Ejd/k2UQhRP9tQI6VRatVdF+++0HVCbqCv0eUKy2ttpqKwAuueSS1CfLoKQ6XlmM5+DBgwE48sgjU9sDDzwAFHJxBeShSImYffbZe51LEuvPPvsstSldoq8k55Joucxcye5Rxqz7TfJnKCx1ycznnXfe1DdixLf7Ar766qsAbLvttqlv0UUXBWDzzTdPbbJudQ8uvvjiqU8JqiWRtcxc1ro8HlFc0jOVRt6Q+PnImWeeCcAee+wBVKZJyDJr1TNvC8oYY0yWeIIyxhiTJS3ZsLBafbuoxVftNAU4b7755v58TQUxV6Xnd8dAf39zc5rtkmpWTcCZZpoJgKuuugqA22+/PfUddNBBQKX5rvp822+/PVCIAgDWXXddoNIF0F+aNZ4SgVx99dU1nUPjPssss6Q2uTWUz7Taaqulvi233LLi/BpDIG39Ee83bWly4IEH1nQ9DZBFJYl+fCdQuEej4OLhhx8GKt14qg5z4403ArDBBhs069Kyc/HF+0p1+eROjs9wve44ufjlSo3u2egebBS7+IwxxnQsDVtQ888/P1BkMI8NVS54/PHHU5sC8X1tgNcXURKsVcUhhxwCwMcff5z6oviiv3R1ddHd3Z1NUL8WoihEv5OC0XHzQ4lZ4spsiSWWAGD66acH4O677059/a0KHiWwQWjRtvFU8B2KwHpf27pffPHF6fgnP/lJRV9cbUqAE+/P559/HqgUBjSJjrSgxMwzzwxUVnqRtRS9I2qLOyA0iewsqEgtmxLWSs/3ryqiAKVuCGoLyhhjTMfScKJuLZZTXI3Kf/zyyy+nNq00tTKKMRetCLTKjX+39dZbA3D88cenNq3OZQXE1XoZdOL+PbPOOmuvYyXm9ZXsDPDuu+8ChT9a9fqg+O3rHZOYuFo2snDroZocudq27rJEY+Ki5L1aWS688MKpL973Yr755qvr2kS1/dAGIiuvvDIAd9xxR68+xQdjor1iedViVuMSjVpOcW+pnqj6PJRrQdWCLShjjDFZ4gnKGGNMljRVZi63RJQmSkr+2muvpTZtK/7ggw8CsOeee6a+am6SejjiiCPScXQFNkorg/qNui9i4F7uEbmiqknYo0hCtb20XcJxxx2X+vQbakuORugE0YlSI6I7RVUT9BxNN910qU/uqrjVhM7RAlddx4gk4v1Wb0qF3hX6Hc4999zyLqySrEUSjSKBGvSuzqHafFBdGCWRm1zg1apTVMMiCWOMMR1LSxJ1J5988nSsIPsNN9yQ2rbYYgugmLHrrXwca3/FSr1QOZuXKZho1opfm4vdc889jZ4+WaY777xzatt4442B6omrstRixfihQ4cCRd20U089NfW99dZbQDmB6U6woCQNV/096J2kHC1+WVpxdar6lC2oBJ+tBSWLSQKTF198sVdfvUi+v/baa6c2pVKUxIC0oFST87TTTkttep71vowV+vVuVnoRFDL066+/Hqj93rYFZYwxpmNpiQUVV5X/+c9/AFhjjTVSm2bsavEmJeJp5Vlrcqj+TlWRoVidxdm/WsXpWihzxR9XjWXGJrSCjyt+VevW+FRLyj366KPjNQJFLC/GCFqdtDc2mr3iV9mkmLj43nvvAfD9738fqCwFpb+LMSv56avtbyaLQntG9fzbOsnKgopxDMXhtLfQPPPMk/rkbVH6Q/w7WaJREq22aom6sm5VZR0KC6Af5cPaYkHpeuN7Qe+svu6NmMysGKgk+XHPrJNOOgkoYs1Q3H+yRmMqygILLNDrevQM6N9IX94VW1DGGGM6Fk9QxhhjsqQlW75HM2+ttdYCKl1LckHJXI9S0bhxXD3IxJUrK36ngvuxP26g2GrKlhwvs8y3ngi5AqL0Wb+FxiIKWE455RSgsn6hKsuvt956QFGNu1MoowKD/vbpp58G4Kc//Wnqk1tUtdCqBflj9Q2dS5+Pz0at9Sw7kXhPyV2/5JJLApXCpih4GhNxjC+66CKg2FAzorSVyHLLLQeUI0JqBXJFRuFYNdeexuSKK64AincAFNVj5JKXqxpg0KBBQGUqiuogym192WWXpb7JJpus1/klxtI7N56rUWxBGWOMyZKWiCTageTat912W2rTKiSuQBRwrTdomnNQX6tVWUcnnHBC6jvxxBOBYrWjLcihWNFuuOGGqU2iln322QeorPwd5dONkvN4hvMDlatZWUBKfI5V+kVcsUoYIOK5dP6S6sllJZJoNtXeYxI+9VVnrg6ylpkfcMABQCEWiTsYHHvssRWfvffee9PxnXfeCRTbu0MhnPj1r38NVL4vtT+c0lW7KWknAAAGXElEQVQAbr31VqCQ+kdruS8skjDGGNOxeIIyxhiTJS0RSbQDBUFjnTiVjY/uvDK3U88FbWehgGbcVE+BeJn2ClhDEQxdffXVU9s777wDFJUkBuJ41YrcSNEFJxfdDjvsMMa/u+WWW8bYNy6PZxn0rBwTGUhbb0Q3pSo1RPfwGWecUfH5vsQmhx12WDpeaaWVgEphg4QnEpDFDTfffPNNoPrmr3L7DRs2rK//Sl3YgjLGGJMlTbWgqmVBt2rDNWWnxw3kZFkcdNBBLbmGWjn//PPTcV8r8VrRpo6qIi+BA8Cll14KFL9DrIMmGXWUpWv8JDcvY0vpgYQsII3nG2+8kfpknZYpu430VYGlHZS57XitPPnkk0Ax/lGCvuqqq7bsOppNrG8nIUS0EGuR50tif8EFF6S2Cy+8EIDNNtsstemdoDGNqTr6zvge13tGXpkysQVljDEmS5pqQck/HFeQsqriKl1xjjJQ7a4bb7yx4vtiX7RYcqAMqynywgsvAIXUfq+99kp9l19+OVCsNH/+85+nPsWs9C8USc2SsQ5EYpJ2rFtYD6oRqSRHKKo7NysWkovlJNphXccaclC5slfNuYcffril11QmqhuqZxrqT+9Qcv0mm2wCVL575VGpltRcjWoxU8n59d6IMatG7wlbUMYYY7LEE5QxxpgsKc3FF7OVtV3DYostBhSBTIDll18eqKzptu222wJFmfdat9SQ+y5ufqhtPKpteii3VixFPxBRtQhtBBmrP0hiuttuuwEwyyyzpD4FYmNNuIMPPri5F5sB/XXrRaJ0V9SaUV8mkiO3YEPElqM0kfvvv3+Mn4m1O88888ymX1Ozqbc+Y7UQyoILLljRduihh6Y+pY+UwciRI0s7l7AFZYwxJkuaUotvxx13BIoacHF78aWXXhqoXNUrmKwV/5prrpn67r77bqB6XS0ljfWVrBdXkjrH9NNPX8t/o09yrh0nMcgTTzwBVIoedCypahSwyMKMGxbKGms2zRrPalXtG9i0rhcSKihwHS13yW+bJTMfCwOuFl9f7yq9Y2KNuJLJrhZflNTreZaEXJ4qKDbC1PtS9fSg3Hqa0047LVB948JquBafMcaYjsUTlDHGmCxp6nYbcifFzcFUmSCap8qCruYmkRtmyimnBCoDz3KhxHwQfV5B6/fffz/1aSPEMlw7zXbxVRuDetH4HHHEEalNLhC5YWPOwvDhw4HastLLJmeXaV/0zPX75JNPUp8EKO0QS9AGF181d6o2a5x99tnH+HfVBE0ffvghUOnSV5vua4D99tsPgLPPPrueS+0PWbv41l9/faDIc4zjpveHRCZl54VV+91rwS4+Y4wxHUtTK0n86Ec/AoracFBkRCuoB7DKKqsAhZVUDWUkzzbbbKlNAojYptWCVm7VrKtOoIyahRKFxGoR8dg0jqxNSWyjAEdVoRsJ3JexZX2r0ApaljgU241Xu/5q9fN69sXnV1ZBDOzXu2ofSMQx1TjLoo991113HVBs+V42zawgYgvKGGNMlrRky/exxVO0SppqqqmASpmiJJEvvfRSXd+pc8atj2tNAK6FdsRM+uvrzZkJJ5yQr776itGjRzdlPDfddFMArrzyykZP3ye6r2Oy4tZbbw0UdSFbTBYycyVBzzDDDP36+7g9uWpLtonsYlDRupR1NHjwYKDSqhk0aBAAH330UVlfXQqOQRljjOlYPEEZY4zJkpZs+T42cYK2I6iWgVyva09MPfXUALz77ru9+qJoQ1nWnUCZrr1cgu9lZrJXo9muPbmQtWVMlDvffvvt/TpndN3UslVHvZ9vJXErE1MuUVwi8ZNSSuL2GTH1YUznaPd7YEzYgjLGGJMlLRFJDCS6urro7u5umkhCyc1lCjqqIZl/sy2YWmml6ESJnpLhl0E1qbRo0+o0C5HEACI7kUSP8wL5WkLVsEjCGGNMx+IJyhhjTJa0RCQxkGiGCR2D3M127YlcXHvtoF7XnjZ86ysTv5NcK2bgMVDvP1tQxhhjsqReC2okMKIZF9JhDC7pPCOBEblJg9tAqeNZ0rkSzaph1mTKGFM/7wVZ36MdSE3jWZeKzxhjjGkVdvEZY4zJEk9QxhhjssQTlDHGmCzxBGWMMSZLPEEZY4zJEk9QxhhjssQTlDHGmCzxBGWMMSZLPEEZY4zJkv8HkB9r5rZaCLwAAAAASUVORK5CYII=\n",
      "text/plain": [
       "<Figure size 432x288 with 10 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "epoch = 32/100, d_loss=0.593, g_loss=1.156                                                                                                                      \n",
      "epoch = 33/100, d_loss=0.596, g_loss=1.180                                                                                                                      \n",
      "epoch = 34/100, d_loss=0.632, g_loss=1.154                                                                                                                      \n",
      "epoch = 35/100, d_loss=0.624, g_loss=1.184                                                                                                                      \n",
      "epoch = 36/100, d_loss=0.602, g_loss=1.123                                                                                                                      \n",
      "epoch = 37/100, d_loss=0.605, g_loss=1.116                                                                                                                      \n",
      "epoch = 38/100, d_loss=0.613, g_loss=1.229                                                                                                                      \n",
      "epoch = 39/100, d_loss=0.601, g_loss=1.093                                                                                                                                                                                                                          \n",
      "epoch = 40/100, d_loss=0.634, g_loss=1.222                                                                                                                      \n",
      "epoch = 41/100, d_loss=0.592, g_loss=1.208                                                                                                                                                                                                                         \n"
     ]
    },
    {
     "data": {
      "image/png": "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FUrPJrS706qhvd5aBcLXrqtkG4r6TVlrNXHixLp/tyj1rvFSBCUiIkmqNUliMtD+7rj9lunq6lq00SdRewZqz+I13KZqzwy9R4tVVXvW1EGJiIi0iob4REQkSeqgREQkSeqgREQkSeqgREQkSeqgREQkSeqgREQkSeqgREQkSeqgREQkSeqgREQkSeqgREQkSeqgREQkSeqgREQkSeqgREQkSeqgREQkSeqgREQkSeqgREQkSeqgREQkSeqgREQkSeqgREQkSeqgREQkSeqgREQkSeqgREQkSeqgREQkSeqgREQkSeqgREQkSeqgREQkSeqgREQkSeqgREQkSeqgREQkSeqgREQkSeqgREQkSeqgREQkSeqgREQkSeqgREQkSeqgREQkSeqgREQkSeqgREQkSeqgREQkSeqgREQkSeqgREQkSeqgREQkSeqgREQkSeqgREQkSeqgREQkSeqgREQkSeqgREQkSeqgREQkSeqgREQkSeqgREQkSeqgREQkSeqgREQkSeqgREQkSeqgREQkSbPV8sMdHR1dzbqQsunq6upo9DmKaM855pgDgM8//7zRpyrEgAEDAJg0aRIAffrEe6Dp06fP9PdSac9eZEpXV9eijTyB2jOj4fYEtalXzWe+pg5KvvrC7e6Lth6zzz57eDxt2rSafjevY1p11VUBGD9+fGMXBvTt2xeAzz77DIB+/fqFc++9994MP28dk5lrrrnC448++qjh65GqTWz3BfQyas820BCfiIgkSR2UiIgkqaOrq/oh0Y6Ojq6Ojg5q+Z1unis87u75bIjok08+menP5M1z2PP75+7s7ATgyy+/rOOKs5o1Z7L55psD8K9//Ssca/U8U7X/NsbaFWpv287OTr788kvNQRVvbFdX19qNPIHaM6Ph9oRytmm188i1quYzrwhKRESSVHME1cRrCZZddtnweJFFFgFghRVWAGCXXXYJ5z799FMA1llnnXBsnnnmAeCss84C4Jxzzgnn3n333cKusZ13/Mccc0x4fNRRR+U9L1Bd9JMKRVCFSz6Cmm22r3K0/Of9v//9bzNfshGzbATVLIqgRESktNRBiYhIkpIc4hs8eHB4PHnyZAAefvhhIDsc8OyzzwLwzjvvhGOXXXYZAOeddx6QndSr5m+1YQeAL774YqY/V9SQVFFJJ81mySpjxowJx4YPHw7AMsss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\n",
      "text/plain": [
       "<Figure size 432x288 with 10 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "epoch = 42/100, d_loss=0.590, g_loss=1.234                                                                                                                      \n",
      "epoch = 43/100, d_loss=0.569, g_loss=1.247                                                                                                                      \n",
      "epoch = 44/100, d_loss=0.612, g_loss=1.199                                                                                                                                                                                                                          \n",
      "epoch = 45/100, d_loss=0.583, g_loss=1.219                                                                                                                      \n",
      "epoch = 46/100, d_loss=0.599, g_loss=1.201                                                                                                                      \n",
      "epoch = 47/100, d_loss=0.568, g_loss=1.196                                                                                                                      \n",
      "epoch = 48/100, d_loss=0.557, g_loss=1.280                                                                                                                      \n",
      "epoch = 49/100, d_loss=0.567, g_loss=1.209                                                                                                                      \n",
      "epoch = 50/100, d_loss=0.558, g_loss=1.307                                                                                                                      \n",
      "epoch = 51/100, d_loss=0.541, g_loss=1.241                                                                                                                      \n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 10 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "epoch = 52/100, d_loss=0.516, g_loss=1.294                                                                                                                      \n",
      "epoch = 53/100, d_loss=0.524, g_loss=1.250                                                                                                                      \n",
      "epoch = 54/100, d_loss=0.568, g_loss=1.284                                                                                                                                                                                                                          \n",
      "epoch = 55/100, d_loss=0.608, g_loss=1.219                                                                                                                      \n",
      "epoch = 56/100, d_loss=0.517, g_loss=1.259                                                                                                                      \n",
      "epoch = 57/100, d_loss=0.549, g_loss=1.217                                                                                                                      \n",
      "epoch = 58/100, d_loss=0.522, g_loss=1.408                                                                                                                                                                                                                          \n",
      "epoch = 59/100, d_loss=0.560, g_loss=1.334                                                                                                                      \n",
      "epoch = 60/100, d_loss=0.616, g_loss=1.252                                                                                                                      \n",
      "epoch = 61/100, d_loss=0.512, g_loss=1.329                                                                                                                      \n"
     ]
    },
    {
     "data": {
      "image/png": "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3Sdx918zB+5bfT3jRR71uzeTBvXjbhFduyK6nnGyirq14usfn3edkurii3/PtdZaC4C//vWvQL5bVAPz8RIutXjuuecAWHrppcM2dY8WdXX3QVsrSajLeNSoUQA8+uijYd+MM84IwFtvvRW2qWtT+44++uiwT8lM+j6Ih0YqK/X0RklQRcko9XIXn5mZlVYSaeatFD8tKNqIa3/tt99+QP0RVCfoqTseQFba+CGHHBK2XXjhhUA2oFn0tLPeeusB+dplCyywAADXXXdd2LbjjjsC8Mc//hHIz9SvVp08NfHvqUF5RYO91WPUU6P+XdETuZY5j+ucya9//evw+rXXXgOywemidOrbb789vFZizx133AG0L7232ZTEAFmVg2uuuQaAE044Ieyrd1UBVaFYaqmleuyrtvhn6q6++mogi4iasciqvgvj+33XXXet6xjNiJzq4QjKzMyS1O/HoDbccMPw+rbbbgPyE4NnnXVWoP4n006mRcdRjJ6G4khRr+ecc04gq3AMcNhhhwHZk+df/vKXsE9PufE10yS9apXOm6HV1zM+b0WgihhV9w2yyuy1TjfQZMm33367pp8/++yzATjggAOA/DiejhHXR/zggw9qOm6BJMagFl98cQCeeuqpsE2/syqVX3/99WFfvfeX1oJTj0D8OSiaLtGAto5B6XPdjM9b5WTv119/PexTyn8t/75Z5xMdy2NQZmZWTm6gzMwsSf22i08plUW14eI0Xi0br0HrWpV1gT3NEh8/fjyQdQPG4uujLqx4tn8zDRkyhPHjx/PVV1+1/XpqufBPP/200beumZIddD3jOoZzzTUXAMcee2zY9pvf/Kavb9WxLr64a+3kk08G4KCDDgrblKykey/+jKprS/8tmsqgxIH4WPr5uN6murab1C2VzIKF9dIwhqrx1LpIq7r2iq5f/Dfua/1Nd/GZmVlptSSC6mQF5kUWWQSAl19+GSgeKG3GoF9ZIyhRenPRZFIt2w5ZrblWmXbaafn2229Lfz1rpadXJerEk4a/973vAcV1J/ugbRFU5YB+XNdNafVxmv95550HZNMZVJcQYIMNNgCypcjjaF7iaRZxNAX5Qf8333yzltPvYQrV20sbQY0bNw7Ivht7o6kNStoZO3Zsj5+J79vBgwf36bwcQZmZWWk1LQ+ztwrb1eiJRceIn8BUIkWlPorWTlJp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mVmKhgwZAsBrr73W0fNoxDTTZPHCd99918EzSYcjKDMzS5IjKLMO6urKEpm6u53gVYs55pgjvP7888+BckdO0kjUNP300wPw9ddfN+t0kuAIyszMkuQGyszMkuQuvhKZccYZAfjyyy/b/t7zzDMPAOPHjw/bVl55ZQCefPLJtp9Pf+FuvbxVVlkFgFlnnRWA/fbbL+y7+uqrAbjqqqvCtmmn/d9XmLpK4y7TqSnRYPLkyUCWaLHNNtuEfbpuyy+/PABPP/10m8+u7xxBmZlZkqaqCEpPWzE9Zc0888wAfPrpp209p3p0InLSNbvxxhsBGDBgQNj3xBNPALDhhhuGbf/+97/bd3JWSkpy+PDDD4Hs6R+yCODiiy8GYM011wz7Bg4cCMAVV1wRtn3wwQdA1rsQp2rPMMMMAHz11Vdh2+jRowHYbrvtmvGrdISixPfffz9se++99wBYYoklgCx5BGDUqFEAfPHFFwBMN910Yd8111wD5D/D+oyvt956ADz33HNNPf96OIIyM7MkddXTB97JQod6aphtttnCthNPPBGAddZZJ2y76KKLABg2bBgAm2++edinJzY9iQF8++23AOy7774A3HnnnWFftWvTieKmugbtHLfQk9hMM83UY99GG20EwJgxYxp+n6nlerbRI93d3as2coBmft5HjBgRXh9//PFANiYSUyQw99xz13Rc/e3isSd55ZVXAFh88cXDNkVas8wyS+79atDw9YS+X9N11103vN56660BOP3008O2V199Fch6POKotKjnqB7zzTdfeP3OO+80dKyYi8WamVlpuYEyM7MkJZ8koa6lt99+G4DHHnss7IsH9uScc84BikN/zbJecMEFw7Zrr70WgEmTJgH5QdY4TE5Bu7qi4u6Eyq69OHW37AkR1a5n3C2ibuBOUPJOPOidOk1JALjpppuALH0cskH4os+out6UCr3qqlmv2uyzzw7kK0noO0DdzT/96U/DvrhrT5RoFCf7lMFTTz0VXu+5554AHHTQQWGbEkHUBXfdddeFfXvssQeQdW9efvnlYd8bb7wBwJFHHhm2xUkUAM8//3x4rb9BuziCMjOzJCWVJKHoRU8IAGeeeSaQpYzGFOHET2B6Mirap6fQQYMGhW0aqH333XcB+Pjjj8O+amnd/XkF2Gr3xIQJE8Lr+eefv5nv2bHr+fLLL4fXStNd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\n",
      "text/plain": [
       "<Figure size 432x288 with 10 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "epoch = 62/100, d_loss=0.501, g_loss=1.352                                                                                                                      \n",
      "epoch = 63/100, d_loss=0.531, g_loss=1.348                                                                                                                      \n",
      "epoch = 64/100, d_loss=0.578, g_loss=1.210                                                                                                                      \n",
      "epoch = 65/100, d_loss=0.531, g_loss=1.305                                                                                                                      \n",
      "epoch = 66/100, d_loss=0.510, g_loss=1.437                                                                                                                      \n",
      "epoch = 67/100, d_loss=0.616, g_loss=1.342                                                                                                                      \n",
      "epoch = 68/100, d_loss=0.477, g_loss=1.382                                                                                                                      \n",
      "epoch = 69/100, d_loss=0.512, g_loss=1.414                                                                                                                      \n",
      "epoch = 70/100, d_loss=0.480, g_loss=1.386                                                                                                                      \n",
      "epoch = 71/100, d_loss=0.540, g_loss=1.255                                                                                                                      \n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 10 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "epoch = 72/100, d_loss=0.546, g_loss=1.385                                                                                                                      \n",
      "epoch = 73/100, d_loss=0.508, g_loss=1.290                                                                                                                      \n",
      "epoch = 74/100, d_loss=0.474, g_loss=1.424                                                                                                                                                                                                                          \n",
      "epoch = 75/100, d_loss=0.536, g_loss=1.417                                                                                                                                                                                                                          \n",
      "epoch = 76/100, d_loss=0.553, g_loss=1.272                                                                                                                      \n",
      "epoch = 77/100, d_loss=0.544, g_loss=1.411                                                                                                                      \n",
      "epoch = 78/100, d_loss=0.507, g_loss=1.592                                                                                                                      \n",
      "epoch = 79/100, d_loss=0.550, g_loss=1.417                                                                                                                      \n",
      "epoch = 80/100, d_loss=0.511, g_loss=1.428                                                                                                                      \n",
      "epoch = 81/100, d_loss=0.503, g_loss=1.546                                                                                                                      \n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 10 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "epoch = 82/100, d_loss=0.546, g_loss=1.457                                                                                                                      \n",
      "epoch = 83/100, d_loss=0.499, g_loss=1.408                                                                                                                      \n",
      "epoch = 84/100, d_loss=0.554, g_loss=1.420                                                                                                                      \n",
      "epoch = 85/100, d_loss=0.483, g_loss=1.367                                                                                                                      \n",
      "epoch = 86/100, d_loss=0.523, g_loss=1.400                                                                                                                      \n",
      "epoch = 87/100, d_loss=0.549, g_loss=1.359                                                                                                                      \n",
      "epoch = 88/100, d_loss=0.492, g_loss=1.437                                                                                                                      \n",
      "epoch = 89/100, d_loss=0.524, g_loss=1.523                                                                                                                      \n",
      "epoch = 90/100, d_loss=0.531, g_loss=1.425                                                                                                                      \n",
      "epoch = 91/100, d_loss=0.588, g_loss=1.395                                                                                                                      \n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 10 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "epoch = 92/100, d_loss=0.558, g_loss=1.614                                                                                                                      \n",
      "epoch = 93/100, d_loss=0.543, g_loss=1.504                                                                                                                      \n",
      "epoch = 94/100, d_loss=0.531, g_loss=1.470                                                                                                                      \n",
      "epoch = 95/100, d_loss=0.517, g_loss=1.514                                                                                                                                                                                                                          \n",
      "epoch = 96/100, d_loss=0.484, g_loss=1.564                                                                                                                      \n",
      "epoch = 97/100, d_loss=0.492, g_loss=1.549                                                                                                                      \n",
      "epoch = 98/100, d_loss=0.467, g_loss=1.605                                                                                                                                                                                                                          \n",
      "epoch = 99/100, d_loss=0.550, g_loss=1.537                                                                                                                                                                                                                          \n",
      "epoch = 100/100, d_loss=0.542, g_loss=1.658                                                                                                                      \n",
      "epoch = 101/100, d_loss=0.525, g_loss=1.371                                                                                                                      \n"
     ]
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAagAAADRCAYAAACZ6CZ9AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4zLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvIxREBQAAIABJREFUeJzt3XeYHVX9x/H3BpEWCCXUEHozdKUFUJogSHmE0CECD0h9BBVRigKCDx2RotIhIC1gkIRA6D2Q0EMnCIQeCC30ur8/+H3OnNmdvbn9nrv5vP5hmNncOzs79575nvM939PR2dmJmZlZavq0+gTMzMyKuIEyM7MkuYEyM7MkuYEyM7MkuYEyM7MkuYEyM7MkuYEyM7MkuYEyM7MkuYEyM7Mkfa+SH+7o6HDZif/X2dnZUetr+HpmWnE9+/T57vns22+/rfWtUzSls7Nz3lpewPdnTs3XE6q/prpXoffcr+V85itqoMx6k5lnnhmATz/9tGXn0NGRfUbrXHZsUj1fzFp7PWebbbaw/dFHH9X0Wu3U2LmBsulWpQ1TqYhLXyCffPJJRa9Z1Ci10xeI1a5v374AfPzxxz3+TK2NUqwe99Qaa6wRtsePH1/z6/XEY1BmZpYkN1BmZpYkd/GZlalU10ilXXvVvk+slyd5TDdKde2lKu7W0ziq/lvP+9ERlJmZJckRlPUqHR0d9c6GK3wPaeWCn46cehdllQJ8/vnnLTyT7+g+n9Y93sjPgCMoMzNLkhsoMzNLUpJdfGPHjg3bgwcPzh177bXXwvZXX30FwGeffRb2rbLKKrljVkzh+zrrrBP2nX/++QAMGjQo7Gu3bqRmdLk16j2U9BB39Wiu1rzzflfE4J133mnIe/dGW265JQBjxowJ+1L+XqilW2/WWWcF6jvpfPXVV+/2mtrefffdw74jjzwSyOYC1jPpwxGUmZklKYkIau655wbg3XffBeCVV14Jx+655x4gi6RGjhwZju2///5A/on2yy+/BLIIQU+e4KfP2AILLADAbrvtFvYtu+yyAAwbNizsGzp0aHNPrBcaOHBg2B4wYAAAP/jBDwC44IILwjHdu5dddlnYd/zxxwOw3HLLAXD99dc39mTbTNfU5rvvvjscm2WWWYB8BNVuvv/97wPZvdGTWiOnlVZaKWw/+OCDQD4ZSG6//XYANt9887BPkX+5kVMliUyOoMzMLEkdlfSn17O68VJLLRW2J06cmDsWn9OMM84IwMorrwzAqaeeGo5NnToVgLPPPjvsu+GGG4DsiUNPILGiJ4NKtXs1c9X/KqrxNWrUqLC91VZbNeV8GnU9Z5hhBgC++eabWl++kMaLNLZx8cUXh2M77bQTkB8j1f1YdF/K119/HbbfeustABZaaCEg+33K8HBnZ+dq5f5wkXaqZq6eEvW4AGy00UYAvP766/V4i5qvJ5R/Teeff34AJk+eXOtbljT77LMD8NJLL4V988wzD5B9D99///3h2AEHHADACy+8EPZVO+ZUzmfeEZSZmSXJDZSZmSWpZUkSQ4YMCdvqAnnmmWcAWG+99cIxdc088sgjAGywwQYlX7ec+mTxMXUD3HHHHWWfe29QlNKqUP3DDz9s9uk0zNJLLw3As88+25DXV1fpo48+CsDCCy/c7WeUAgzZ/amuOyWrxOJuPJ2//l7q6gZ4/PHHazr33mDdddcF4M477wTyS5W8+eabrTilumhk117//v3DtoZE4nu0q3jayWGHHQbALrvs0qCzy3MEZWZmSWp6BKUEhT322CM7ie99dxo77LADUFtlaA3sFSVCFCWEKG2yHokT7WSmmWbqtk/RwIILLtjs02mYRkVOopR8RUJxgoOeTpVSDlkK74033gjAvffeG44pSoonQWqfkiomTJhQ1/NPTdfPYdFnNo4wb7nllm77Sv3b6ZGuzc9//nMArrzyynDsvffeA/LJUkpM070c39N/+ctfgHyST3y83hxBmZlZktxAmZlZkprexaew+5RTTgn7zjvvPCCrINGo0Pzcc88F8t2LCmdLzZvqjdQlFc8PUleAEkcsTwPwGpgHWGyxxQB44oknAHjqqafCMVXpiLutVl11VSC7199+++1u7xN3wejfTquSQDubY445wrbuPc37+sc//hGO6Vr885//DPt0HZWcomQqcBefaC7jiBEjuh3TPa3uaIDNNtsMyOb4xd2nqoVaz5p/pTiCMjOzJDW9koQGfYsG6dVif/HFF7W+Tdn0+yv1vNyZ+u1eSaLU8sxXXHFF2N55552bcj7tcD033nhjIEtwgOx+ue666wDYZpttwrFSUx3idGhRslA86Kz7s4poIPlKEvq8x5UeVNng8ssvB+BXv/pVOKYUeyXzANx0001ANtjfwASf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\n",
      "text/plain": [
       "<Figure size 432x288 with 10 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "epochs = 100\n",
    "batch_size = 64\n",
    "smooth = 0.1\n",
    "\n",
    "real = np.ones(shape=(batch_size, 1))\n",
    "fake = np.zeros(shape=(batch_size, 1))\n",
    "\n",
    "d_loss = []\n",
    "d_g_loss = []\n",
    "\n",
    "for e in range(epochs + 1):\n",
    "    for i in range(len(X_train) // batch_size):\n",
    "        \n",
    "        # Train Discriminator weights\n",
    "        discriminator.trainable = True\n",
    "        \n",
    "        # Real samples\n",
    "        X_batch = X_train[i*batch_size:(i+1)*batch_size]\n",
    "        d_loss_real = discriminator.train_on_batch(x=X_batch, y=real * (1 - smooth))\n",
    "        \n",
    "        # Fake Samples\n",
    "        z = np.random.normal(loc=0, scale=1, size=(batch_size, latent_dim))\n",
    "        X_fake = generator.predict_on_batch(z)\n",
    "        d_loss_fake = discriminator.train_on_batch(x=X_fake, y=fake)\n",
    "         \n",
    "        # Discriminator loss\n",
    "        d_loss_batch = 0.5 * (d_loss_real[0] + d_loss_fake[0])\n",
    "        \n",
    "        # Train Generator weights\n",
    "        discriminator.trainable = False\n",
    "        d_g_loss_batch = d_g.train_on_batch(x=z, y=real)\n",
    "   \n",
    "        print(\n",
    "            'epoch = %d/%d, batch = %d/%d, d_loss=%.3f, g_loss=%.3f' % (e + 1, epochs, i, len(X_train) // batch_size, d_loss_batch, d_g_loss_batch[0]),\n",
    "            100*' ',\n",
    "            end='\\r'\n",
    "        )\n",
    "    \n",
    "    d_loss.append(d_loss_batch)\n",
    "    d_g_loss.append(d_g_loss_batch[0])\n",
    "    print('epoch = %d/%d, d_loss=%.3f, g_loss=%.3f' % (e + 1, epochs, d_loss[-1], d_g_loss[-1]), 100*' ')\n",
    "\n",
    "    if e % 10 == 0:\n",
    "        samples = 10\n",
    "        x_fake = generator.predict(np.random.normal(loc=0, scale=1, size=(samples, latent_dim)))\n",
    "\n",
    "        for k in range(samples):\n",
    "            plt.subplot(2, 5, k+1)\n",
    "            plt.imshow(x_fake[k].reshape(28, 28), cmap='gray')\n",
    "            plt.xticks([])\n",
    "            plt.yticks([])\n",
    "\n",
    "        plt.tight_layout()\n",
    "        plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 5. Evaluate model"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2018-06-18T17:50:25.534633Z",
     "start_time": "2018-06-18T17:50:25.370944Z"
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# plotting the metrics\n",
    "plt.plot(d_loss)\n",
    "plt.plot(d_g_loss)\n",
    "plt.title('Model loss')\n",
    "plt.ylabel('Loss')\n",
    "plt.xlabel('Epoch')\n",
    "plt.legend(['Discriminator', 'Adversarial'], loc='center right')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 5. Tips and tricks\n",
    "\n",
    "### Training GANS\n",
    "\n",
    "We train the discriminator and the generator in turn in a loop as follows:\n",
    "\n",
    "1. Set the discriminator trainable\n",
    "2. Train the discriminator with the real digit images and the images generated by the generator to classify the real and fake images.\n",
    "3. Set the discriminator non-trainable\n",
    "4. Train the generator as part of the GAN. We feed latent samples into the GAN and let the generator to produce digit images and use the discriminator to classify the image.\n",
    "\n",
    "---\n",
    "1. Decide on the GAN architecture: What is architecture of G? What is the architecture of D?\n",
    "1. Train: Alternately update D and G for a fixed number of updates\n",
    "    * Update D (freeze G): Half the samples are real, and half are fake.\n",
    "    * Update G (freeze D): All samples are generated (note that even though D is frozen, the gradients flow through D)\n",
    "1. Manually inspect some fake samples. If quality is high enough (or if quality is not improving), then stop. Else repeat step 2.\n",
    "\n",
    "### Practical tips and tricks for training\n",
    "\n",
    "It’s important to choose a good overall architecture. For this architecture:\n",
    "* That both the generator and the discriminator have at least one hidden layer.\n",
    "* Two simultaneous optimizations. \n",
    "* We define a loss for the G and D. Minimize the loss for the D, while simultaneously use another optimizer to minimize the loss for the G. \n",
    "* Overall this recipe of using batch normalization, Adam optimization and Cross entropy losses with label smoothing works fairly well in practice. \n",
    "\n",
    "### Applications \n",
    "\n",
    "GANs have already become widely known for their application versatility and their outstanding results in generating data. They have been used in real-life applications for:\n",
    "* Text generation, \n",
    "* Image generation,\n",
    "* Video generation, and \n",
    "* Text-to-image synthesis.\n",
    "\n",
    "### Pros\n",
    "\n",
    "* Game-theoretic approach,\n",
    "* Generate the sharpest images,\n",
    "* Easy to train (since no statistical inference is required), and only back-propogation is needed to obtain gradients.\n",
    "\n",
    "### Cons\n",
    "\n",
    "* Can be tricky and unstable to train, no inference queries. No statistical inference can be done with them. (They belong to the class of direct implicit density models (they can model p(x) without explicitly defining the p.d.f)).\n",
    "* Difficult to optimize due to unstable training dynamics.\n",
    "\n",
    "### Conclusion\n",
    "\n",
    "The generator must ask for suggestions from the discriminator and intuitively, the discriminator tells how much to tweak each pixel in order to make the image a little bit more realistic.\n"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.0"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
